package com.github.wxiaoqi.security.crm.core.blockchain;

import com.github.wxiaoqi.security.crm.core.blockchain.block.Block;
import com.github.wxiaoqi.security.crm.core.blockchain.transaction.Transaction;

/** 
* @author: bolei
* @date：2018年9月9日 下午2:10:45 
* @description：类说明
*/

public class PlatformContract {

	//根据平台id获取平台coin配置，根据配置文件进行区块奖励和生成区块及进行相应的入账操作
	
	//给平台币入账 该入账包写表 platform_coin_accout platform_coin_accout_journal 
	//同时写表personal_account和表personal_account_journal
	//platform_coin_accout 
	
	/**
     * 生成区块每次产生交易调用该方法
     *
     * @param platformId
     */
    public void mineBlock(Long platformId) {
        if (isCreateBlock()) {
            String preBlockHash = getTopBlockHash();
            if (preBlockHash == null) {
                Block block = Block.newGenesisDposBlock(new Transaction(), platformId);
                saveBlockToChain(block);
                preBlockHash = getTopBlockHash();
            }
            Block block = Block.newDposBlock(preBlockHash, getUnPackedTransaction(platformId), platformId);
            saveBlockToChain(block);
        }
    }
    
    
    /**
     * 获取是否到达打包数量，如果达到了打包数量 进行打包
     * 对platform_coin_transaction_from表中serial_number字段参数210取余判断是否应该生成区块
     * @return
     */
    private boolean isCreateBlock() {
    	
        return true;
    }

    /**
     * 获取当前区块头的hash，
     *
     * @return 如果没有区块，则返回null
     */
    private String getTopBlockHash() {
        return "";
    }

    /**
     * 获取未打包交易
     *
     * @param platformId
     * @return
     */
    private Transaction[] getUnPackedTransaction(Long platformId) {
        return null;
    }

    /**
     * 保存区块
     *
     * @param block
     */
    private void saveBlockToChain(Block block) {

    }

    /**
     * 判断是否是前期种子用户，前期注册的用户会分享商家火钻池里面一定比例的火钻作为奖励，需要定义好前期多少人享受奖励和多大比例的火钻作为奖励
     *
     *
     * @param address
     * @return
     */
    private boolean isLuckAddress(String address){
        return true;
    }

    /**
     * 设置初始奖励，给前期种子用户发放奖励。
     * @param address
     */
    public void dispatchLuckReward(String address){
        if (isLuckAddress(address)){
            Transaction tx = new Transaction();
            //............
            // 保存一条交易
        }
    }
}

